跳至主要内容

Rootfs A/B 備援

在 NVIDIA Jetson 設備上實現 Rootfs A/B 備援機制的完整指南。


概述​

Rootfs A/B 備援 提供:

  • ✅ 系統備援:兩個獨立的 rootfs 分區(A 和 B)
  • ✅ 自動回退:啟動失敗時切換到備份
  • ✅ 無縫更新:更新時不影響當前運作
  • ✅ 災難恢復:失敗時自動恢復

Root 檔案系統備援​

Jetson Linux 在 NVIDIA® Jetson Orin 系列 上提供 root 檔案系統備援支援。

它使用兩個 root 檔案系統:

  • Rootfs A:儲存在通常的檔案系統分區(APP)
  • Rootfs B:儲存在新的分區(APP_b),位於 APP 之後

Rootfs A/B 分區佈局

每個 rootfs 都是獨立的,佔用一個插槽:"slot A"或"slot B"。

  • Bootloader A 始終與 rootfs A 一起啟動
  • Bootloader B 始終與 rootfs B 一起啟動

Bootloader 和 Rootfs

  • Boot ROM 從 BR-BCT 或 Scratch 暫存器中獲取目標插槽編號。
  • 載入對應的 Bootloader 階段並啟動到指定的 rootfs 分區。

Bootloader 和 Rootfs


實施指南​

步驟 1:準備主機​

準備以下內容:

  • ✅ X86 主機,Ubuntu 22.04 或更高版本
  • ✅ 磁碟空間:至少 256 GiB
  • ⚠️ 不要使用 VM - 使用實體電腦
  • ✅ USB 線:Type-A 到 Type-C
  • ✅ Jetson 設備:AFE-R750 範例

主機準備

USB 連接

步驟 2:在主機上準備映像​

下載映像:

重要注意事項:

  • ❌ 不要使用 root# 或滑鼠解壓縮
  • ✅ 下載與 Jetson 設備上 相同的 JetPack 映像版本

步驟 3:在主機上安裝先決條件​

sudo usermod -aG dialout $USER
sudo apt update
sudo ./Linux_for_Tegra/tools/l4t_flash_prerequisites.sh
sudo reboot

步驟 4:獲取儲存參數​

sudo fdisk -l /dev/nvme0n1

範例:

  • Storage_real_size: 119.2 GB
  • Sectors_number: 250069680

Bootloader 和 Rootfs

步驟 5:修改設定檔​

sudo gedit Linux_for_Tegra/tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml

將 num_sectors 設置為 Sectors_number。

Bootloader 和 Rootfs

步驟 6:將設備設置為恢復模式​

  1. 關閉 Jetson 設備

  2. 連接 USB 到 FLASH 埠 電源關閉並連接

  3. 打開 底蓋 恢復設置

  4. 設置 RST_RCOVY 引腳 2 為 ON

  5. 按 電源按鈕 恢復引腳

步驟 7:驗證連接​

在主機上打開終端並執行:

lsusb

驗證 AFE-R750 是否在恢復模式下被檢測到。

連接驗證

步驟 8:燒錄具備備援機制的映像檔​

cd Linux_for_Tegra

AGX Orin eMMC:

sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./flash.sh jetson-agx-orin-devkit mmcblk0p1

AGX Orin NVMe: 根據 SSD 容量調整 -S 參數

sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml" \
-S 58GiB \
--showlogs \
--network usb0 \
jetson-agx-orin-devkit \
nvme0n1p1

Orin NX NVMe:

sudo ROOTFS_AB=1 ROOTFS_RETRY_COUNT_MAX=1 ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-c tools/kernel_flash/flash_l4t_t234_nvme_rootfs_ab.xml \
-p "-c bootloader/generic/cfg/flash_t234_qspi.xml" \
-S 58GiB \
--showlogs \
--network usb0 \
jetson-orin-nano-devkit \
internal
備註

Storage_real_size 的一半,再減去開機磁區占用的 1G,最後取整數。

  • 119.2 / 2 - 1 = 59.6 - 1 = 58.6 → 58GiB

步驟 9:檢查備援功能​

sudo nvbootctrl -t rootfs dump-slots-info
sudo nvbootctrl -t rootfs set-active-boot-slot 1
sudo reboot

重新啟動後,再次檢查插槽資訊 - Rootfs 已更改。

參考​


← 返回 解決方案 總覽